package game.tests;

import com.golden.gamedev.Game;


/**
 * @author Conrad, Shun
 * This abstractGameState class controls all states of the Game utilizing the GameLoop and 
 * various added classes
 * also, we assume that game loop just initializes things 
 */
public abstract class AbstractGameState {
	private GameManager gameManager;
	
	/**
	 * This is the general constructor for the class, it is mainly implemented for reflection
	 * purposes
	 */
	public AbstractGameState(){
	}
	
	/**
	 * This generic run method delegates different update and render methods to their respective
	 * gameState classes
	
	 */
	public abstract void run(GameLoop gameLoop);
	
	/**
	 * This abstract method adds a response/action sequence to generic list of registered events
	 * that will eventually be passed onto the Event Team, gameManager class
	 */
	protected abstract void addEvent(String eventName, IEventHandler method);
	
	/**
	 * This method is registered to an event. When that event occurs while in another 
	 * game state, this method will be called, setting the currentGameState within the 
	 * game loop, to this class
	 * the next time the game loop executes, this class' run method will be called
	 */
	public void startGameState(GameLoop gameLoop){
		//create an Event filter and alter other methods accordingly
	}
	
	
	
}
